package com.ruoyi.fk.service;

import java.util.List;
import java.util.Map;
import com.ruoyi.fk.domain.QuestionBank;
import com.ruoyi.fk.domain.BankQuestionMapping;
import com.ruoyi.fk.domain.QuestionBankVO;

/**
 * 题库管理Service接口
 * 
 * @author fengkun
 * @date 2025-08-12
 */
public interface IQuestionBankService 
{
    /**
     * 查询题库管理
     * 
     * @param id 题库管理主键
     * @return 题库管理
     */
    public QuestionBank selectQuestionBankById(Integer id);

    /**
     * 查询题库管理列表
     * 
     * @param questionBank 题库管理
     * @return 题库管理集合
     */
    public List<QuestionBank> selectQuestionBankList(QuestionBank questionBank);

    //章节练习查询
    public List<QuestionBankVO> selectQuestionBankChapterList(QuestionBankVO questionBankVO);

    //章节练习查询用id
    public QuestionBankVO selectQuestionBankChapterById(Integer id);

    /**
     * 新增题库管理
     * 
     * @param questionBank 题库管理
     * @return 结果
     */
    public int insertQuestionBank(QuestionBank questionBank);

    /**
     * 修改题库管理
     * 
     * @param questionBank 题库管理
     * @return 结果
     */
    public int updateQuestionBank(QuestionBank questionBank);

    /**
     * 批量删除题库管理
     * 
     * @param ids 需要删除的题库管理主键集合
     * @return 结果
     */
    public int deleteQuestionBankByIds(Integer[] ids);

    /**
     * 删除题库管理信息
     * 
     * @param id 题库管理主键
     * @return 结果
     */
    public int deleteQuestionBankById(Integer id);

    /**
     * 根据题库ID查询相关联的题目信息
     * 
     * @param bankId 题库ID
     * @return 题目信息列表
     */
    public List<Map<String, Object>> selectQuestionsByBankId(Integer bankId);

    /**
     * 批量添加题库题目关联
     * 
     * @param mappings 关联关系列表
     * @return 结果
     */
    public int batchInsertBankQuestionMapping(List<BankQuestionMapping> mappings);

    /**
     * 批量删除题库题目关联
     * 
     * @param mappings 关联关系列表
     * @return 结果
     */
    public int batchDeleteBankQuestionMapping(List<BankQuestionMapping> mappings);

    /**
     * 根据题库ID删除所有关联的题目
     * 
     * @param bankId 题库ID
     * @return 结果
     */
    public int deleteQuestionsByBankId(Integer bankId);

    /**
     * 根据题目ID删除所有关联的题库
     * 
     * @param questionId 题目ID
     * @return 结果
     */
//    public int deleteBanksByQuestionId(Integer questionId);

    /**
     * 查询题库中未关联的题目
     * 
     * @param params 查询参数
     * @return 题目列表
     */
    public List<Map<String, Object>> selectUnlinkedQuestions(Map<String, Object> params);

    /**
     * 检查关联关系是否存在
     * 
     * @param params 包含bankId和questionId的Map
     * @return 存在数量
     */
    public Integer checkMappingExists(Map<String, Object> params);


    /**
     * 根据题库ID列表查询题库信息
     *
     * @param ids 题库ID列表
     * @return 题库信息列表
     */
    List<QuestionBank> selectQuestionBankListByIds(List<Integer> ids);

    /**
     * 检查用户是否购买指定题库
     *
     * @param userId 用户ID
     * @param questionBankId 题库ID
     * @return 是否已购买
     */
    boolean checkUserQuestionBankPurchase(Long userId, Integer questionBankId);

}
